2014-12-02 66 views
-2

我嘗試了一個關於在activity_main.xml中從Android 將數據插入到mysql中的Internet教程,其中包含註冊新用戶的按鈕。
所以我把所有的信息,如名字等
當用戶點擊提交按鈕,它應該重新回到activity_main.xml。
但是,當我點擊提交,該應用程序被迫關閉,並沒有將數據插入到MySQL數據庫。
我的問題是,代碼中究竟有什麼錯誤?
請給我建議。 代碼中的所有內容都與我在android應用程序中使用的一樣。另外我在這裏提供日誌跟蹤。 任何幫助表示讚賞...將數據提交到mysql後應用程序強制關閉

regactivity.java

package com.example.estate; 

import java.util.ArrayList; 
import java.util.List; 

import org.apache.http.NameValuePair; 
import org.apache.http.message.BasicNameValuePair; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 

public class RegActivity extends Activity { 

// Progress Dialog 
private ProgressDialog pDialog; 

JSONParser jsonParser = new JSONParser(); 
EditText fname; 
EditText lname; 
EditText username; 
EditText password; 
EditText location; 
EditText contact; 

Button btnreg; 
Button btncancel; 

// url to create new product 
private static String url_new_user = "http://192.168.43.236/Estate_Conny/new_user.php"; 

// JSON Node names 
private static final String TAG_SUCCESS = "success"; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.reg_activity); 

    // Edit Text 
    fname = (EditText) findViewById(R.id.fname); 
    lname = (EditText) findViewById(R.id.lname); 
    username = (EditText) findViewById(R.id.uname); 
    password = (EditText) findViewById(R.id.pass); 
    location = (EditText) findViewById(R.id.addr); 
    contact = (EditText) findViewById(R.id.contact); 


    // Create button 
    btnreg = (Button) findViewById(R.id.btnreg); 
    btncancel = (Button) findViewById(R.id.btncancel); 

    // button click event 
    btnreg.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 
      // creating new product in background thread 
      new CreateNewProduct().execute(); 
     } 
    }); 

    btncancel.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 
      finish(); 
      Intent i = new Intent(getApplicationContext(), MainActivity.class); 
      startActivity(i); 
     } 
    }); 
} 

/** 
* Background Async Task to Create new product 
* */ 
class CreateNewProduct extends AsyncTask<String, String, String> { 

    /** 
    * Before starting background thread Show Progress Dialog 
    * */ 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pDialog = new ProgressDialog(RegActivity.this); 
     pDialog.setMessage("Registering New User.."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(true); 
     pDialog.show(); 
    } 

    /** 
    * Creating product 
    * */ 
    protected String doInBackground(String... args) { 
     String Firstname = fname.getText().toString(); 
     String Lastname = lname.getText().toString(); 
     String Username = username.getText().toString(); 
     String Password = password.getText().toString(); 
     String Address = location.getText().toString(); 
     String Contact = contact.getText().toString(); 

     // Building Parameters 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     params.add(new BasicNameValuePair("fname", Firstname)); 
     params.add(new BasicNameValuePair("lname", Lastname)); 
     params.add(new BasicNameValuePair("username", Username)); 
     params.add(new BasicNameValuePair("password", Password)); 
     params.add(new BasicNameValuePair("location", Address)); 
     params.add(new BasicNameValuePair("contact", Contact)); 

     // getting JSON Object 
     // Note that create product url accepts POST method 
     JSONObject json = jsonParser.makeHttpRequest(url_new_user, 
       "POST", params); 

     // check log cat fro response 
     Log.d("Create Response", json.toString()); 

     // check for success tag 
     try { 
      int success = json.getInt(TAG_SUCCESS); 

      if (success == 1) { 
       // successfully created product 
       finish(); 
       Intent i = new Intent(getApplicationContext(), MainActivity.class); 
       startActivity(i); 
      } else { 
       // failed to create product 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 

    /** 
    * After completing background task Dismiss the progress dialog 
    * **/ 
    protected void onPostExecute(String file_url) { 
     // dismiss the dialog once done 
     pDialog.dismiss(); 
    } 

} 
} 

MainActivity.java

package com.example.estate; 

import java.util.ArrayList; 
import java.util.List; 

import org.apache.http.NameValuePair; 
import org.apache.http.message.BasicNameValuePair; 
import org.json.JSONException; 
import org.json.JSONObject; 

import com.example.estate.RegActivity; 
//import com.example.androidhive.NewProductActivity; 
import com.example.estate.R; 
import com.example.estate.JSONParser; 
import com.example.estate.MainActivity; 
//import com.example.estate.ReadComments; 
import com.example.estate.RegActivity; 
//import com.example.estate.Login.AttemptLogin; 

import android.os.AsyncTask; 
import android.os.Bundle; 
import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.util.Log; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 


public class MainActivity extends Activity implements OnClickListener{ 

Button btnlogin; 
Button btnreg; 
Button btncancel; 

EditText username; 
EditText password; 

private ProgressDialog pDialog; 

JSONParser jsonParser = new JSONParser(); 

private static final String LOGIN_URL = "http://192.168.43.101/Estate_Conny/login.php"; 


private static final String TAG_SUCCESS = "success"; 
    private static final String TAG_MESSAGE = "message"; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // Buttons 
    btnlogin = (Button) findViewById(R.id.btnlogin); 
    btnreg = (Button) findViewById(R.id.btncreate); 
    btncancel = (Button) findViewById(R.id.btnquit); 

    username = (EditText) findViewById(R.id.inputname); 
    password = (EditText) findViewById(R.id.inputpassword); 

    btnreg.setOnClickListener(this); 
    btnlogin.setOnClickListener(this); 
    btncancel.setOnClickListener(this); 

    } 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch (v.getId()) { 
    case R.id.btnlogin: 
      new AttemptLogin().execute(); 
     break; 
    case R.id.btncreate: 
      Intent i = new Intent(this, RegActivity.class); 
      startActivity(i); 
     break; 

    case R.id.btnquit: 
     finish(); 
    break; 

    default: 
     break; 
    } 
} 

class AttemptLogin extends AsyncTask<String, String, String> { 

    /** 
    * Before starting background thread Show Progress Dialog 
    * */ 
    boolean failure = false; 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pDialog = new ProgressDialog(MainActivity.this); 
     pDialog.setMessage("Logging in User..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(true); 
     pDialog.show(); 
    } 

    @Override 
    protected String doInBackground(String... args) { 
     // TODO Auto-generated method stub 
     // Check for success tag 
     int success; 
     String user = username.getText().toString(); 
     String pass = password.getText().toString(); 
     try { 
      // Building Parameters 
      List<NameValuePair> params = new ArrayList<NameValuePair>(); 
      params.add(new BasicNameValuePair("username", user)); 
      params.add(new BasicNameValuePair("password", pass)); 

      Log.d("request!", "starting"); 
      // getting product details by making HTTP request 
      JSONObject json = jsonParser.makeHttpRequest(
        LOGIN_URL, "POST", params); 

      // check your log for json response 
      Log.d("Login attempt", json.toString()); 

      // json success tag 
      success = json.getInt(TAG_SUCCESS); 
      if (success == 1) { 
       Log.d("Login Successful!", json.toString()); 
       Intent i = new Intent(MainActivity.this, ScreenActivity.class); 
       finish(); 
       startActivity(i); 
       return json.getString(TAG_MESSAGE); 
      }else{ 
       Log.d("Login Failure!", json.getString(TAG_MESSAGE)); 
       return json.getString(TAG_MESSAGE); 

      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     return null; 

    } 
    /** 
    * After completing background task Dismiss the progress dialog 
    * **/ 
    protected void onPostExecute(String file_url) { 
     // dismiss the dialog once product deleted 
     pDialog.dismiss(); 
     if (file_url != null){ 
      Toast.makeText(MainActivity.this, file_url, Toast.LENGTH_LONG).show(); 
     } 

    } 

} 
} 

new_user.php

<?php 

/* 
* Following code will create a new product row 
* All product details are read from HTTP Post Request 
*/ 

// array for JSON response 
$response = array(); 

/check for required fields 
if (isset($_POST['fname']) && isset($_POST['lname']) && isset($_POST['username']) &&  isset($_POST['password']) && isset($_POST['location']) && isset($_POST['contact'])) { 

$fname = $_POST['fname']; 
$lname = $_POST['lname']; 
$username = $_POST['username']; 
$password = $_POST['password']; 
$location = $_POST['location']; 
$contact = $_POST['contact']; 

// include db connect class 
require_once __DIR__ . '/db_connect.php'; 

// connecting to db 
$db = new DB_CONNECT(); 

// mysql inserting a new row 
$result = mysql_query("INSERT INTO user(firstname, lastname, username, password, location, contact) VALUES('$fname', '$lname', '$username','$password','$location','$contact')"); 

// check if row inserted or not 
if ($result) { 
    // successfully inserted into database 
    $response["success"] = 1; 
    $response["message"] = "User successfully Registered."; 

    // echoing JSON response 
    echo json_encode($response); 
} else { 
    // failed to insert row 
    $response["success"] = 0; 
    $response["message"] = "Oops! An error occurred."; 

    // echoing JSON response 
    echo json_encode($response); 
} 
} else { 
// required field is missing 
$response["success"] = 0; 
$response["message"] = "Required field(s) is missing"; 

// echoing JSON response 
echo json_encode($response); 
} 
?> 

Log_traces:

Process: agrawal.trial.server, PID: 21767 
    java.lang.RuntimeException: An error occured while executing doInBackground() 
      at android.os.AsyncTask$3.done(AsyncTask.java:300) 
      at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 
      at java.util.concurrent.FutureTask.setException(FutureTask.java:222) 
      at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
      at java.lang.Thread.run(Thread.java:841) 
    Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 
      at android.os.Handler.<init>(Handler.java:200) 
      at android.os.Handler.<init>(Handler.java:114) 
      at android.widget.Toast$TN.<init>(Toast.java:345) 
      at android.widget.Toast.<init>(Toast.java:100) 
      at android.widget.Toast.makeText(Toast.java:256) 
      at agrawal.trial.server.RegActivity$CreateNewProduct.doInBackground(RegActivity.java:116) 
      at agrawal.trial.server.RegActivity$CreateNewProduct.doInBackground(RegActivity.java:89) 
      at android.os.AsyncTask$2.call(AsyncTask.java:288) 
      at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
      at java.lang.Thread.run(Thread.java:841) 

java.lang.IllegalArgumentException: HTTP entity may not be null 
      at org.apache.http.util.EntityUtils.toString(EntityUtils.java:110) 
      at org.apache.http.util.EntityUtils.toString(EntityUtils.java:146) 
      at miui.util.ErrorReport.b(SourceFile:363) 
      at miui.util.ErrorReport.sendReportRequest(SourceFile:320) 
      at miui.util.ErrorReport$2.a(SourceFile:336) 
      at miui.util.ErrorReport$2.doInBackground(SourceFile:333) 
      at android.os.AsyncTask$2.call(AsyncTask.java:288) 
      at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
      at java.lang.Thread.run(Thread.java:841) 
12-01 20:31:48.771 1057-1225/? W/ContextImpl﹕ Calling a method in the system process without a qualified user: android.app.ContextImpl.bindService:1585 android.content.ContextWrapper.bindService:517 miui.os.DropBoxManager.b:361 miui.os.DropBoxManager.a:350 miui.os.DropBoxManager.addText:314 
12-01 20:31:48.801 1138-1150/? W/MessageQueue﹕ Handler (com.miui.internal.server.DropBoxManagerService$2) {428282d8} sending message to a Handler on a dead thread 
+0

請張貼logcat的。 – 2014-12-02 06:17:44

+0

請從@koutuk試試以下答案。 – 2014-12-02 06:31:22

+0

@RemeesMSyde對不起,即時通訊非常新的android,我可以在哪裏獲得logcat的訪問?即時通訊使用日食火星。我已經嘗試過koutuk,依然如此。 – 2014-12-02 06:47:09

回答

1
   if (success == 1) { 
       // successfully created product 

       Intent i = new Intent(getApplicationContext(), MainActivity.class); 
       startActivity(i); 
       finish(); //replace position of This 
      } else { 
       // failed to create product 
      } 

在onpostExecute阻止將這個給Do刪除回地面

+0

嗨@ koutuk,我已經嘗試過Urs,但仍然,應用程序關閉。但我不明白你的話'把這個onpostExecute塊刪除從背部做'。請賜教 – 2014-12-02 06:48:21

+1

親愛的刪除完成(); – koutuk 2014-12-02 07:15:28

+0

檢查getApplicationContext()沒有得到空值 – koutuk 2014-12-02 07:16:06

相關問題