[英]How to get data from mysql and view that data in android application?
[英]Get data from MySQL to Android application
我想使用PHP从MySQL数据库获取数据并将其显示在Android活动中。 我对它进行编码并通过JSON Array,但是有一个问题,我不知道如何连接到服务器,并且我的所有数据库都在本地服务器上。 我编写了代码,请告诉我哪里出了问题,这样我可以得到准确的结果。 我会非常感谢你。
我的所有数据库都在localhost中,并且未打开活动。 显示错误“意外停止” :(我如何获得准确的结果。请指导我
现在它给出了以下错误:(并加载已保存的详细信息
12-08 11:09:19.314: E/WindowManager(19972): Activity com.example.visit.record.My_Task has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40555850 that was originally added here
12-08 11:09:19.314: E/WindowManager(19972): android.view.WindowLeaked: Activity com.example.visit.record.My_Task has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40555850 that was originally added here
12-08 11:09:19.314: E/WindowManager(19972): at android.view.ViewRoot.<init>(ViewRoot.java:277)
12-08 11:09:19.314: E/WindowManager(19972): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
12-08 11:09:19.314: E/WindowManager(19972): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
12-08 11:09:19.314: E/WindowManager(19972): at android.view.Window$LocalWindowManager.addView(Window.java:433)
12-08 11:09:19.314: E/WindowManager(19972): at android.app.Dialog.show(Dialog.java:288)
12-08 11:09:19.314: E/WindowManager(19972): at com.example.visit.record.My_Task$GetTaskDetails.onPreExecute(My_Task.java:149)
12-08 11:09:19.314: E/WindowManager(19972): at android.os.AsyncTask.execute(AsyncTask.java:391)
12-08 11:09:19.314: E/WindowManager(19972): at com.example.visit.record.My_Task.onCreate(My_Task.java:107)
12-08 11:09:19.314: E/WindowManager(19972): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
12-08 11:09:19.314: E/WindowManager(19972): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1785)
12-08 11:09:19.314: E/WindowManager(19972): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1842)
12-08 11:09:19.314: E/WindowManager(19972): at android.app.ActivityThread.access$1500(ActivityThread.java:132)
12-08 11:09:19.314: E/WindowManager(19972): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1038)
12-08 11:09:19.314: E/WindowManager(19972): at android.os.Handler.dispatchMessage(Handler.java:99)
12-08 11:09:19.314: E/WindowManager(19972): at android.os.Looper.loop(Looper.java:143)
12-08 11:09:19.314: E/WindowManager(19972): at android.app.ActivityThread.main(ActivityThread.java:4268)
12-08 11:09:19.314: E/WindowManager(19972): at java.lang.reflect.Method.invokeNative(Native Method)
12-08 11:09:19.314: E/WindowManager(19972): at java.lang.reflect.Method.invoke(Method.java:507)
12-08 11:09:19.314: E/WindowManager(19972): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-08 11:09:19.314: E/WindowManager(19972): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-08 11:09:19.314: E/WindowManager(19972): at dalvik.system.NativeStart.main(Native Method)
当前,您正在尝试访问GetProductDetails
AsyncTask
类的doInBackground
中的Ui元素或runOnUiThread
。 因为无法从doInBackground
访问UI元素, doInBackground
可以使用onPreExecute
和onPostExecute
来更新UI元素。 runOnUiThread
代码的方式为不使用runOnUiThread
内部的doInBackground
或UI元素:
class GetProductDetails extends AsyncTask<String, String, JSONObject> {
/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
tDialog = new ProgressDialog(My_Task.this);
tDialog.setMessage("Loading task details. Please wait...");
tDialog.setIndeterminate(false);
tDialog.setCancelable(true);
tDialog.show();
}
protected JSONObject doInBackground(String... params) {
JSONObject my_task
// Check for success tag
int success;
try {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("cid", cid));
// getting product details by making HTTP request
// Note that product details url will use GET request
JSONObject json = JSONParser.makeHttpRequest(
url_read_mytask, "GET", params);
// check your log for json response
Log.d("Single Task Details", json.toString());
// json success tag
success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// successfully received product details
JSONArray my_taskObj = json
.getJSONArray(TAG_MYTASK); // JSON Array
// get first product object from JSON Array
my_task = my_taskObj.getJSONObject(0);
}
else
{
// task with cid not found
}
}
catch (JSONException e) {
e.printStackTrace();
}
return my_task;
}
protected void onPostExecute(JSONObject my_task) {
// dismiss the dialog once got all details
// task with this cid found
// Edit Text
// display task data in EditText
cus_name_txtbx = (EditText) findViewById(R.id.cus_name_txt);
cus_name_txtbx.setText(my_task.getString(TAG_NAME));
contact_no_txtbx = (EditText) findViewById(R.id.contact_no_txt);
contact_no_txtbx.setText(my_task.getString(TAG_CONTACT));
ticket_no_txtbx = (EditText) findViewById(R.id.ticket_no_txt);
ticket_no_txtbx.setText(my_task.getString(TAG_TICKET));
task_detail_txtbx = (EditText) findViewById(R.id.task_detail_txt);
task_detail_txtbx.setText(my_task.getString(TAG_TASKDETAIL));
tDialog.dismiss();
}
并将您的onCreate代码更改为:
public class My_Task extends Activity {
TextView cus_name_txt, contact_no_txt, ticket_no_txt, task_detail_txt,attend_by_txts;
EditText attend_by_txtbx, cus_name_txtbx, contact_no_txtbx, ticket_no_txtbx, task_detail_txtbx;
Button btnSave;
Button btnDelete;
////YOUR CODE here
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_task);
cus_name_txt = (TextView) findViewById(R.id.cus_name_txt);
contact_no_txt = (TextView)findViewById(R.id.contact_no_txt);
ticket_no_txt = (TextView)findViewById(R.id.ticket_no_txt);
task_detail_txt = (TextView)findViewById(R.id.task_detail_txt);
attend_by_txts = (TextView)findViewById(R.id.attend_by_txt;
attend_by_txtbx = (EditText)findViewById(R.id.attend_by_txtbx);
attend_by_txtbx.setText(attend_by_txt);
//your code here
一件事很明显。 您不能从后台线程更改UI
。
在这里你在做什么
cus_name_txtbx = (EditText) findViewById(R.id.cus_name_txt);
cus_name_txtbx.setText(my_task.getString(TAG_NAME));
contact_no_txtbx = (EditText) findViewById(R.id.contact_no_txt);
contact_no_txtbx.setText(my_task.getString(TAG_CONTACT));
ticket_no_txtbx = (EditText) findViewById(R.id.ticket_no_txt);
ticket_no_txtbx.setText(my_task.getString(TAG_TICKET));
task_detail_txtbx = (EditText) findViewById(R.id.task_detail_txt);
task_detail_txtbx.setText(my_task.getString(TAG_TASKDETAIL));
在GetProductDetails
的doInBackground
中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.