Versuch zum aufrufen der virtuellen Methode java.lang.String java.lang.Objekt.toString()' auf ein null-Objekt Verweis
bin ich völlig neu auf android und dies ist mein erstes Projekt. Ich bin versucht zu machen, ein android-Programm, das als Eingabe nimmt der Benutzer ein, und führen Sie einige Operationen auf der mysql-Datenbank, ich lief das Programm, aber ich habe diese Fehler:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
at com.example.nada.mysqldemo.MainActivity.viewResultMessage(MainActivity.java:89)
at com.example.nada.mysqldemo.UserServiceAPI.onPostExecute(UserServiceAPI.java:83)
at android.os.AsyncTask.finish(AsyncTask.java:632)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
kann mir jemand sagen wo der Fehler ist und wie man es beheben bitte?
ich bin Anbringung meinen code hier:
mainactivity.java
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText idEditText, nameEditText;
private ProgressDialog loadingDialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
idEditText = (EditText) findViewById(R.id.et_id);
nameEditText = (EditText) findViewById(R.id.et_name);
loadingDialog = new ProgressDialog(this);
loadingDialog.setCancelable(false);
loadingDialog.setCanceledOnTouchOutside(false);
loadingDialog.setMessage("Please wait...");
}
public void selectOneButtonAction(View v) {
checkId();
loadingDialog.show();
new UserServiceAPI(this, UserServiceAPI.SELECT_ONE).execute(idEditText
.getText().toString().trim(), "");
}
public void selectAllButtonAction(View v) {
loadingDialog.show();
new UserServiceAPI(this, UserServiceAPI.SELECT_ONE).execute("", "");
}
public void insertButtonAction(View v) {
checkName();
loadingDialog.show();
new UserServiceAPI(this, UserServiceAPI.SELECT_ONE).execute("",
nameEditText.getText().toString().trim());
}
public void deleteButtonAction(View v) {
checkId();
loadingDialog.show();
new UserServiceAPI(this, UserServiceAPI.SELECT_ONE).execute(idEditText
.getText().toString().trim(), "");
}
public void updateButtonAction(View v) {
checkId();
checkName();
loadingDialog.show();
new UserServiceAPI(this, UserServiceAPI.SELECT_ONE).execute(idEditText
.getText().toString().trim(), nameEditText.getText().toString()
.trim());
}
private void checkId() {
if (idEditText.getText().toString().trim().length() == 0) {
showToast("Missing id");
return;
}
}
private void checkName() {
if (nameEditText.getText().toString().trim().length() == 0) {
showToast("Missing name");
return;
}
}
private void showToast(String text) {
Toast.makeText(this, text, Toast.LENGTH_LONG).show();
}
public void viewResultMessage(Object result) {
if (loadingDialog.isShowing())
loadingDialog.dismiss();
showToast(result.toString());
}
}
UserServiceAPI
import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import android.os.AsyncTask;
import android.util.Log;
public class UserServiceAPI extends AsyncTask<String, Integer, Object> {
public static final String INSERT = "insert";
public static final String UPDATE = "update";
public static final String DELETE = "delete";
public static final String SELECT_ONE = "selectone";
public static final String SELECT_ALL = "selectall";
private String action;
private MainActivity activity;
//private String url = "http://192.168.1.100/mysql_android/user_operations.php";
private String url = "http://10.0.2.2/mysql_android/user_operations.php";
public UserServiceAPI(MainActivity activity, String action) {
this.action = action;
this.activity = activity;
}
@Override
protected Object doInBackground(String... params) {
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("action", action));
nameValuePairs.add(new BasicNameValuePair("id", params[0]));
nameValuePairs.add(new BasicNameValuePair("name", params[1]));
String connRs = connect(url, nameValuePairs);
try {
if (action.equals(INSERT) || action.equals(UPDATE)
|| action.equals(DELETE)) {
JSONObject jsonObject = new JSONObject(connRs);
return jsonObject.getString("message");
} else if (action.equals(SELECT_ALL)) {
JSONArray jsonArray = new JSONArray(connRs);
if (jsonArray.length() == 0) {
return "No data found";
}
String rs = "";
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String name = jsonObject.getString("name");
rs += name;
}
return rs;
} else if (action.equals(SELECT_ONE)) {
JSONObject jsonObject = new JSONObject(connRs);
String user = jsonObject.getString("user");
if (user == null || user.equals("null")) {
return "No date for this id";
} else {
return jsonObject.getString("name");
}
}
} catch (Exception e) {
}
return null;
}
@Override
protected void onPostExecute(Object result) {
super.onPostExecute(result);
activity.viewResultMessage(result);
}
/**
* connect to server with url and parameters
*
* @param url
* @param params
* @return
*/
public static String connect(String url, ArrayList<NameValuePair> params) {
DefaultHttpClient httpClient = new DefaultHttpClient();
try {
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
int status = httpResponse.getStatusLine().getStatusCode();
if (status == 200) {
HttpEntity httpEntity = httpResponse.getEntity();
return EntityUtils.toString(httpEntity);
}
} catch (SocketTimeoutException ex) {
Log.d("RS", "SocketTimeoutException: " + ex.toString());
} catch (SocketException ex) {
Log.d("RS", "SocketException: " + ex.toString());
} catch (Exception e) {
Log.d("RS", "Connect EX: " + e.toString());
e.printStackTrace();
}
return null;
}
}
wenn jemand helfen kann, bin ich so dankbar
InformationsquelleAutor Eric Z | 2015-02-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die log-Meldung:
Punkte um die folgende Zeile in
viewResultMessage
:Dies bedeutet, dass
result
istnull
. Wo kommtresult
kommen? Es kommt von diesem call-inonPostExecute
:Woher kommt der
result
von hier aus kommen? Nach derAsyncTask
- Dokumentation:So, in Ihrem
doInBackground
Methode, die Sie zurückgebennull
. Das problem liegt wohl hier:In diesen Zeilen, Sie fangen mögliche Ausnahme, die passieren könnte, ignoriert die Ausnahme, und die Rückkehr
null
. Dies bewirkt, dass das Verhalten, das Sie beobachtet.dieses Problem zu beheben, finden Sie heraus, was Ausnahme ist gefangen hier, und das problem beheben. Sie können auch erwägen, die Rücksendung etwas anderes als
null
in diesem Fall.InformationsquelleAutor Greg Hewgill