当我按下按钮后,尝试将数据发送到Web服务器时,我的android应用程序崩溃了。
试图搜索它,但是我发现的大多数代码都与我的代码不同。
logcat消息:
08-02 09:17:23.308 27425-27425/com.hamin.ctest E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.hamin.ctest, PID: 27425
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources$Theme android.content.Context.getTheme()' on a null object reference
at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:222)
at android.app.AlertDialog.<init>(AlertDialog.java:200)
at android.app.AlertDialog.<init>(AlertDialog.java:196)
at android.app.AlertDialog.<init>(AlertDialog.java:141)
at android.app.ProgressDialog.<init>(ProgressDialog.java:77)
at com.hamin.ctest.AsyncSendTestData.<init>(AsyncSendTestData.java:33)
at com.hamin.ctest.MainActivity$2.onClick(MainActivity.java:59)
at android.view.View.performClick(View.java:5647)
at android.view.View$PerformClick.run(View.java:22462)
at android.os.Handler.handleCallback(Handler.java:754)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:163)
at android.app.ActivityThread.main(ActivityThread.java:6363)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
我进口了所有东西。 Java代码:
public class AsyncSendTestData extends AsyncTask<String, String, String>
{
public static final int CONNECTION_TIMEOUT=10000;
public static final int READ_TIMEOUT=15000;
Context context;
public AsyncSendTestData(Context context) {
this.context = context;
}
ProgressDialog pdLoading = new ProgressDialog(context);
HttpURLConnection conn;
URL url = null;
@Override
protected void onPreExecute() {
super.onPreExecute();
//this method will be running on UI thread
pdLoading.setMessage("\tLoading...");
pdLoading.setCancelable(false);
pdLoading.show();
}
@Override
protected String doInBackground(String... params) {
try {
// Enter URL address where your php file resides
//url = new URL("http://localhost/test/login.inc.php");
url = new URL("https://ctestapp.000webhostapp.com/TSR.php");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "exception";
}
try {
// Setup HttpURLConnection class to send and receive data from php and mysql
conn = (HttpURLConnection)url.openConnection();
conn.setReadTimeout(READ_TIMEOUT);
conn.setConnectTimeout(CONNECTION_TIMEOUT);
conn.setRequestMethod("POST");
// setDoInput and setDoOutput method depict handling of both send and receive
conn.setDoInput(true);
conn.setDoOutput(true);
// Append parameters to URL
Uri.Builder builder = new Uri.Builder()
.appendQueryParameter("doit", params[0]);
//.appendQueryParameter("pass", params[1]);
String query = builder.build().getEncodedQuery();
// Open connection for sending data
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(query);
writer.flush();
writer.close();
os.close();
conn.connect();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
return "exception";
} catch (Exception e) {
e.printStackTrace();
}
try {
int response_code = conn.getResponseCode();
// Check if successful connection made
if (response_code == HttpURLConnection.HTTP_OK) {
// Read data sent from server
InputStream input = conn.getInputStream();
BufferedReader reader =
new BufferedReader(new InputStreamReader(input));
StringBuilder result = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
result.append(line);
}
// Pass data to onPostExecute method
return(result.toString());
}else{
return("unsuccessful");
}
} catch (IOException e) {
e.printStackTrace();
return "exception";
} finally {
conn.disconnect();
}
}
@Override
protected void onPostExecute(String result) {
//this method will be running on UI thread
pdLoading.dismiss();
if(result.equalsIgnoreCase("true"))
{
/* Here launching another activity when login successful. If you persist login state
use sharedPreferences of Android. and logout button to clear sharedPreferences.
*/
Toast.makeText(context, "Done" + result, Toast.LENGTH_SHORT).show();
/*
Intent intent = new Intent(context,SuccessActivity.class);
startActivity(intent);
MainActivity.this.finish();
*/
}else if (result.equalsIgnoreCase("false")){
// If username and password does not match display a error message
Toast.makeText(context, "Invalid email or password", Toast.LENGTH_LONG).show();
} else if (result.equalsIgnoreCase("exception") || result.equalsIgnoreCase("unsuccessful")) {
Toast.makeText(context, "OOPs! Something went wrong. Connection Problem.", Toast.LENGTH_LONG).show();
}
}
}
php代码:
<?php
if(isset($_POST['doit']))
{
$reversed = $_POST['doit'];
echo $reversed;
}
?>
答案 0 :(得分:0)
从以下位置更改ProgressDialog
初始化代码:
public AsyncSendTestData(Context context) {
this.context = context;
}
ProgressDialog pdLoading = new ProgressDialog(context);
收件人:
ProgressDialog pdLoading;
public AsyncSendTestData(Context context) {
this.context = context;
this.pdLoading = new ProgressDialog(context);
}