2017-08-11 50 views
0

我有一个数据库在MySQL上的树莓派服务器上,我存储有关具有多个属性的机器的数据。我想连接到这个数据库并执行CRUD(创建,读取,更新,删除)操作。
我使用这些java文件连接到一个PHP文件,该文件又返回一个JSON对象。使用Json保持连接对mysql服务器开放

public class JSONParser { 

String charset = "UTF-8"; 
HttpURLConnection conn; 
DataOutputStream wr; 
StringBuilder result; 
URL urlObj; 
JSONObject jObj = null; 
StringBuilder sbParams; 
String paramsString; 

public JSONObject makeHttpRequest(String url, String method, 
            HashMap<String, String> params) { 

    sbParams = new StringBuilder(); 
    int i = 0; 
    for (String key : params.keySet()) { 
     try { 
      if (i != 0){ 
       sbParams.append("&"); 
      } 
      sbParams.append(key).append("=") 
        .append(URLEncoder.encode(params.get(key), charset)); 

     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } 
     i++; 
    } 

    if (method.equals("POST")) { 
     // request method is POST 
     try { 
      urlObj = new URL(url); 

      conn = (HttpURLConnection) urlObj.openConnection(); 

      conn.setDoOutput(true); 

      conn.setRequestMethod("POST"); 

      conn.setRequestProperty("Accept-Charset", charset); 

      conn.setReadTimeout(10000); 
      conn.setConnectTimeout(15000); 

      conn.connect(); 

      paramsString = sbParams.toString(); 

      wr = new DataOutputStream(conn.getOutputStream()); 
      wr.writeBytes(paramsString); 
      wr.flush(); 
      wr.close(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    else if(method.equals("GET")){ 
     // request method is GET 

     if (sbParams.length() != 0) { 
      url += "?" + sbParams.toString(); 
     } 

     try { 
      urlObj = new URL(url); 

      conn = (HttpURLConnection) urlObj.openConnection(); 

      conn.setDoOutput(false); 

      conn.setRequestMethod("GET"); 

      conn.setRequestProperty("Accept-Charset", charset); 

      conn.setConnectTimeout(15000); 

      conn.connect(); 

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

    } 

    try { 
     //Receive the response from the server 
     InputStream in = new BufferedInputStream(conn.getInputStream()); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 
     result = new StringBuilder(); 
     String line; 
     while ((line = reader.readLine()) != null) { 
      result.append(line); 
     } 

     Log.d("JSON Parser", "result: " + result.toString()); 

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

    conn.disconnect(); 

    // try parse the string to a JSON object 
    try { 
     jObj = new JSONObject(result.toString()); 
    } catch (JSONException e) { 
     Log.e("JSON Parser", "Error parsing data " + e.toString()); 
    } 

    // return JSON Object 
    return jObj; 
} 
} 

,然后主类,我把这个JSON解析器

public class MainActivity extends FragmentActivity{ 

private static String url_import = "http://192.168.8.100/import.php"; 
private ProgressDialog progressDialog; 
JSONParser Jsonparser = new JSONParser(); 
String text; 
boolean Ohoh; 

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

    Button btn = (Button) findViewById(R.id.button); 
    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      EditText editText = (EditText) findViewById(R.id.editText); 
      text = editText.getText().toString(); 
      new CreateNewProduct().execute(); 
     } 
    }); 
} 

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

    //Show progress dialog 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     progressDialog = new ProgressDialog(MainActivity.this); 
     progressDialog.setMessage("WAIT..."); 
     progressDialog.setIndeterminate(false); 
     progressDialog.setCancelable(false); 
     progressDialog.show(); 

    } 

    protected String doInBackground(String... args){ 

     HashMap<String, String> params = new HashMap<>(); 
     params.put("Name", text); 
     params.put("Company", "EDP"); 
     params.put("Phone Number", "+00856554"); 

     Log.d("request", "starting"); 
     //JSON 
     JSONObject json =Jsonparser.makeHttpRequest(url_import, "POST", params); 

     if(json != null){Ohoh = true;} else{Ohoh = false;} 
     return null; 
    } 

    protected void onPostExecute(String url_link){ 
     if(Ohoh) { 
      TextView itworkd = (TextView) findViewById(R.id.textView); 
      itworkd.setText("it workd"); 
     } 
     progressDialog.dismiss(); 
    } 

} 

} 

我的PHP文件是非常基本的,我只是打开连接并发送基本查询。

如何保持这种连接打开,这样我就不用再连接到数据库(需要较长的时间不利于用户)时,我想要做的另一个查询(即使是在其他活动)?

+0

摆脱PHP垃圾和使用servlet与连接池。 – EJP

回答

0

您可以使用改装,它是解析JSON数据的简单方法,它让当你需要数据连接。

public class ApiClint { 
    public static final String BASE_URL = "http://192.168.0.105:8080/"; 
    public static Retrofit retrofit = null; 


    public static Retrofit getClient(){ 
     Gson gson = new GsonBuilder() 
       .setLenient() 
       .create(); 
     if (retrofit==null){ 
      retrofit = new Retrofit.Builder() 
        .baseUrl(BASE_URL) 
        .addConverterFactory(GsonConverterFactory.create(gson)) 
        .build(); 
     } 
     return retrofit; 
    } 
} 

,并使用apiservice

public interface ApiService { 

    @GET("app/con_get_data.php") 
    Call<UserList> getAllDataFood(); 
    @FormUrlEncoded 
    @POST("app/insert.php") 
    Call<Response> insert(
      @Field("table_no") String table_no, 
      @Field("ordered_item_name") String ordered_item_name, 
      @Field("item_quantity") String item_quantity, 
      @Field("total_bill_per_item") String total_bill_per_item, 
      @Field("total_after_discount") String total_after_discount 

    ); 
} 
+0

我不明白什么ApiService做:■ –

+0

这是一个接口类。这里声明的ResultSet的那个方法(从乌尔URL JSON字符串得到)......,并呼吁重新出现在你行动的方法。 –

相关问题