AM尝试将数据从android发送到本地主机但收到以下错误:
以下是我的register.xml代码
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:background="@color/MediumVioletRed"
tools:context=".register">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:layout_margin="10dp"
>
<ImageView
android:id="@+id/profile"
android:layout_width="match_parent"
android:layout_height="100dp"
android:src="@drawable/profile"/>
<EditText
android:id="@+id/username"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_below="@+id/profile"
android:layout_marginTop="20dp"
android:background="@color/White"
android:hint="@string/name"/>
<EditText
android:id="@+id/email"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_below="@+id/username"
android:layout_marginTop="20dp"
android:background="@color/White"
android:inputType="textEmailAddress"
android:hint="@string/email"/>
<EditText
android:id="@+id/phone"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_below="@+id/email"
android:layout_marginTop="20dp"
android:background="@color/White"
android:hint="@string/phone"/>
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_below="@+id/phone"
android:inputType="textPassword"
android:hint="@string/password"
android:layout_marginTop="20dp"
android:background="@color/White"/>
<EditText
android:id="@+id/confirmpassword"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_below="@+id/password"
android:layout_marginTop="20dp"
android:inputType="textPassword"
android:background="@color/White"
android:hint="@string/password"
/>
<Button
android:id="@+id/registerbutton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/confirmpassword"
android:text="@string/register"
android:layout_marginTop="20dp"
/>
</RelativeLayout>
</ScrollView>
以下是我的register.java代码
package com.bluelinktech.simon.salama;
import android.os.AsyncTask;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.Button;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class register extends Activity {
JSONParser JSONPARSER = new JSONParser();
private static String url="http://10.0.2.2/register.php";
private static final String TAG_SUCCESS = "success";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
Button REGISTER =(Button)findViewById(R.id.registerbutton);
REGISTER.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//REGISTER NEW USER
new RegisterNewUser().execute();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_register, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
private class RegisterNewUser extends AsyncTask<String,Void,String>{
@Override
protected String doInBackground(String... args) {
EditText NAME =(EditText)findViewById(R.id.username);
EditText EMAIL =(EditText)findViewById(R.id.email);
EditText PHONE =(EditText)findViewById(R.id.phone);
EditText PASSWORD =(EditText)findViewById(R.id.password);
String name = NAME.getText().toString();
String email =EMAIL.getText().toString();
String phone =PHONE.getText().toString();
String password = PASSWORD.getText().toString();
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("NAME",name));
params.add(new BasicNameValuePair("EMAIL",email));
params.add(new BasicNameValuePair("PHONE",phone));
params.add(new BasicNameValuePair("PASSWORD",password));
JSONObject json = JSONPARSER.makeHttpRequest(url,"post",params);
return null;
}
}
}
以下是我的JSONParser.java代码
package com.bluelinktech.simon.salama;
/**
* Created by simon on 6/10/15.
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
public class JSONParser{
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
// function get json from url
// by making HTTP POST or GET mehtod
public JSONObject makeHttpRequest(String url, String method,
List<NameValuePair> params) {
// Making HTTP request
try {
// check for request method
if(method == "POST"){
// request method is POST
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}else if(method == "GET"){
// request method is GET
DefaultHttpClient httpClient = new DefaultHttpClient();
String paramString = URLEncodedUtils.format(params, "utf-8");
url += "?" + paramString;
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
public JSONObject getJSONFromUrl(final String url) {
// Making HTTP request
try {
// Construct the client and the HTTP request.
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
// Execute the POST request and store the response locally.
HttpResponse httpResponse = httpClient.execute(httpPost);
// Extract data from the response.
HttpEntity httpEntity = httpResponse.getEntity();
// Open an inputStream with the data content.
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
// Create a BufferedReader to parse through the inputStream.
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
// Declare a string builder to help with the parsing.
StringBuilder sb = new StringBuilder();
// Declare a string to store the JSON object data in string form.
String line = null;
// Build the string until null.
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
// Close the input stream.
is.close();
// Convert the string builder data to an actual string.
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// Try to parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// Return the JSON Object.
return jObj;
}
}
下面是我的phpcode register.php
<?php
$name=$_POST['name'];
$email=$_POST['email'];
$phone=$_POST['phone'];
$password=$_POST['password'];
$link = mysqli_connect("localhost","root","java","salama");
if($link)
{
echo "connected";
}
else
{
echo "could not connect";
}
$result=mysqli_query("INSERT INTO user(name,email,phone,password)
VALUES('$name','$email','$phone','$password')");
if($result)
{
echo "Registered";
}
else
{
echo "Not registered";
}
?>
请帮我解决这个问题。
答案 0 :(得分:1)
您必须在onCreate方法上初始化所有EditText,因此请将您的课程更新为:
EditText NAME, EMAIL , PHONE, PASSWORD;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
NAME =(EditText)findViewById(R.id.username);
EMAIL =(EditText)findViewById(R.id.email);
PHONE =(EditText)findViewById(R.id.phone);
PASSWORD =(EditText)findViewById(R.id.password);
Button REGISTER =(Button)findViewById(R.id.registerbutton);
REGISTER.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//REGISTER NEW USER
new RegisterNewUser().execute();
}
});
}
AND
private class RegisterNewUser extends AsyncTask<String,Void,String>{
@Override
protected String doInBackground(String... args) {
String name = NAME.getText().toString();
String email =EMAIL.getText().toString();
String phone =PHONE.getText().toString();
String password = PASSWORD.getText().toString();
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("NAME",name));
params.add(new BasicNameValuePair("EMAIL",email));
params.add(new BasicNameValuePair("PHONE",phone));
params.add(new BasicNameValuePair("PASSWORD",password));
JSONObject json = JSONPARSER.makeHttpRequest(url,"post",params);
return null;
}
}
答案 1 :(得分:0)
您可能从HttpRequest获得空响应,因此您无法解析它并获得空指针异常。根据我的经验,我建议您使用Volley进行在线交易:https://developer.android.com/training/volley/simple.html。设置需要一些时间,但它肯定比HttpRequest更好。