Я пытаюсь указать Toast
значение, которое находится на моем сервере. Я использую php-файл для извлечения на сервер. К сожалению, приложение закрывается. Я совершенно смущен, что может быть причиной?Подключение к серверу, к сожалению, ошибка
Основное мое вид деятельности package com.примерный андроид. Баланс;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Context mContext;
private Common mApp;
private Button get;
private EditText user;
private HashMap<String, String> sData;
private String usr_id, balance, s;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
get = (Button) findViewById(R.id.but);
user = (EditText) findViewById(R.id.text);
//usr_id = user.getText().toString();
/*get.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (user.getText().toString().length()== 0){
user.setError("Enter your user Id");
user.requestFocus();
}else {
//new Getbalance(mContext,usr_id).execute();
Toast.makeText(mContext, usr_id, Toast.LENGTH_SHORT).show();
}
}
});*/
get.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (user.getText().toString().length() == 0) {
user.setError("Enter your user Id");
user.requestFocus();
} else {
//Toast.makeText(MainActivity.this, user.getText().toString(), Toast.LENGTH_SHORT).show();
// new Getbalance(MainActivity.this,user).execute();
new Getbal().execute();
}
}
private class Getbal extends AsyncTask<String, String, String> {
String userid = user.getText().toString();
@Override
protected String doInBackground(String... strings) {
sData = new HashMap<String, String>();
sData.put("user", userid);
try {
JSONObject json = Connection.UrlConnection(php.bal, sData);
int suc = json.getInt("success");
if (suc == 0) {
} else {
JSONArray jsonArray = json.getJSONArray("balance");
JSONObject child = jsonArray.getJSONObject(0);
String bal = child.optString("balance");
balance = bal;
s = "true";
}
} catch (JSONException e) {
}
return s;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
if (s.equalsIgnoreCase("true")) {
Toast.makeText(MainActivity.this, balance, Toast.LENGTH_SHORT).show();
}
}
}
}
мой файл соединения
package com.example.android.balance;
import android.util.Log;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
public class Connection {
private static InputStream is = null;
private static JSONObject jsonObj = null;
private static String json = null;
private static HttpURLConnection urlConnection;
public Connection() {
}
public static JSONObject UrlConnection(String url, HashMap<String, String> data) {
try {
URL link = new URL(url);
urlConnection = (HttpURLConnection) link.openConnection();
urlConnection.setReadTimeout(10000);
urlConnection.setConnectTimeout(7000);
urlConnection.setRequestMethod("POST");
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);
OutputStream os = urlConnection.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(getQuery(data));
writer.flush();
writer.close();
os.close();
urlConnection.connect();
is = urlConnection.getInputStream();
} catch (MalformedURLException 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();
Log.d("Buffer json : ", json);
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jsonObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
return jsonObj;
}
private static String getQuery(HashMap<String, String> data) throws UnsupportedEncodingException {
StringBuilder result = new StringBuilder();
boolean first = true;
for (Map.Entry<String, String> entry : data.entrySet()) {
if (first)
first = false;
else
result.append("&");
result.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
result.append("=");
result.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
}
return result.toString();
}
}
журнал ошибок
02-23 11:42:23.841 21899-21944/com.example.android.balance E/Buffer Error: Error converting result java.lang.NullPointerException: lock == null
02-23 11:42:23.845 21899-21942/com.example.android.balance D/Surface: Surface::setBuffersDimensions(this=0xb45a6e00,w=720,h=1280)
02-23 11:42:23.852 21899-21944/com.example.android.balance E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #2
Process: com.example.android.balance, PID: 21899
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:304)
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:818)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
at org.json.JSONTokener.nextValue(JSONTokener.java:94)
at org.json.JSONObject.<init>(JSONObject.java:156)
at org.json.JSONObject.<init>(JSONObject.java:173)
at com.example.android.balance.Connection.UrlConnection(Connection.java:80)
at com.example.android.balance.MainActivity$Getbal.doInBackground(MainActivity.java:77)
at com.example.android.balance.MainActivity$Getbal.doInBackground(MainActivity.java:67)
at android.os.AsyncTask$2.call(AsyncTask.java:292)
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:818)
мой файл PHP, который используется для извлечения в базе данных
<?php
if(isset($_POST["user"]))
{
$x2=$_POST["user"];
$response['balance']=array();
$data=Array('LOGINUSER' => 'voixmeapi',
'LOGINSECRET' => sha1('112233'),
'SECTION' => 'SUBSCRIBER',
'ACTION' => 'GETBALANCE',
'DATA'=>Array('SUBSCRIBERID'=>$x2));
$url_send ="http://134.119.216.77/api/api.php";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url_send);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,'request='.json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec ($ch);
curl_close ($ch);
//print_r($server_output);
$test=(explode("{",$server_output));
//print_r($test);
$test1=(explode("CREDIT",$test[2]));
$test2=(explode(",",$test1[1]));
$test3=(explode(":",$test2[0]));//success
$test4=ltrim($test3[1],'"');
//print_r($payment);
$balance=trim($test4,'"');
array_push($response["balance"],$balance);
$response['success']=1;
echo json_encode($response);
}
else{
$response['msg']='No data post';
$response['success']=0;
echo json_encode($response);
}
?>
php.java
package com.example.android.balance.parser;
public class php {
public static final String bal="http://voix-me.com/android/GetBal.php" ;
}
При запуске php-файла в браузере он работает правильно.
Возможно дубликат [Что такое NullPointerException, и как это исправить?] (HTTP: //stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it). – 0xDEADC0DE
проверить мои edit.I есть строка, которая является ссылкой на мой файл php для доступа. –
выглядит как JSON, который вы получаете, как-то недействителен. Попробуйте проверить, что вы на самом деле получаете с сервера. –