java - 不幸的是,与服务器的连接出现错误

标签 java php android

我正在尝试Toast 我服务器中的一个值。我正在使用 php 文件获取到服务器。但不幸的是应用程序关闭了。我完全困惑可能是什么原因?

我的主要 Activity 包 com.example.android.balance;

 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 文件时它工作正常。

最佳答案

这将是因为在正确的连接java文件 引用db connection

java.util.Map map = con.getTypeMap();
map.put("mySchemaName.ATHLETES", Class.forName("Athletes"));
con.setTypeMap(map);

可能会有帮助

关于java - 不幸的是,与服务器的连接出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42408621/

相关文章:

java - 动态加载微调器值

java - 如何使用 customadapter 在 ListView 中添加带有列表项的微调器?

java - 在方法之间重用 PreparedStatement?

Java 前缀搜索与二分搜索

PHP/MySQL - 尝试通过页面 URL 从 MySQL 获取数组传递查询变量

PHP strtotime 在计算时返回错误的结果

java - Intent 在 Android 应用程序中隐藏 adview

java - 字节值的平均值

php - 查找一组字符串的相关程度

android - 在可绘制选择器中更改实体的颜色