Я пытаюсь подключить Android Studio к базе данных MySQL на сервере WAMP.База данных настроена и называется happyplanet.Соединение через php работает, но на стороне andorid есть некоторые ошибки.
У меня есть класс статуса проверки сети:
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
public class CheckNetworkStatus {
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivityManager
= (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
}
A Jason Parser:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.ProtocolException;
import java.net.URL;
import java.util.Map;
import org.json.JSONException;
import org.json.JSONObject;
import android.net.Uri;
import android.util.Log;
public class HttpJasonParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
HttpURLConnection urlConnection = null;
// function get json from url
// by making HTTP POST or GET method
public JSONObject makeHttpRequest(String url, String method,
Map<String, String> params) {
try {
Uri.Builder builder = new Uri.Builder();
URL urlObj;
String encodedParams = "";
if (params != null) {
for (Map.Entry<String, String> entry : params.entrySet()) {
builder.appendQueryParameter(entry.getKey(), entry.getValue());
}
}
if (builder.build().getEncodedQuery() != null) {
encodedParams = builder.build().getEncodedQuery();
}
if ("GET".equals(method)) {
url = url + "?" + encodedParams;
urlObj = new URL(url);
urlConnection = (HttpURLConnection) urlObj.openConnection();
urlConnection.setRequestMethod(method);
} else {
urlObj = new URL(url);
urlConnection = (HttpURLConnection) urlObj.openConnection();
urlConnection.setRequestMethod(method);
urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
urlConnection.setRequestProperty("Content-Length", String.valueOf(encodedParams.getBytes().length));
urlConnection.getOutputStream().write(encodedParams.getBytes());
}
urlConnection.connect();
is = urlConnection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
jObj = new JSONObject(json);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
} catch (Exception e) {
Log.e("Exception", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}
Моя основная деятельность:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// add new product button
Button addNewBtn = (Button) findViewById(R.id.addNewBtn);
addNewBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Check for network connectivity
if (CheckNetworkStatus.isNetworkAvailable(getApplicationContext())) {
Intent i = new Intent(getApplicationContext(),
AddProductActivity.class);
startActivity(i);
} else {
//Display error message if not connected to internet
Toast.makeText(MainActivity.this,
"Unable to connect to internet",
Toast.LENGTH_LONG).show();
}
}
});
}
}
И мой класс для добавления продуктов:
import android.app.ProgressDialog;
import android.content.Intent;
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 com.example.julia.produkte.helper.CheckNetworkStatus;
import com.example.julia.produkte.helper.HttpJasonParser;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
public class AddProductActivity extends AppCompatActivity {
private static final String KEY_SUCCESS = "success";
private static final String KEY_PRODUCT_NAME = "name";
private static final String KEY_PREIS = "preis";
private static final String KEY_STRECKE = "strecke";
private static final String BASE_URL = "http://xxx-myIP/happyplanet/";
private static String STRING_EMPTY = "";
private EditText productNameEditText;
private EditText priceEditText;
private EditText distanceEditText;
private String productName;
private String price;
private String distance;
private Button addButton;
private int success;
private ProgressDialog pDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_product);
productNameEditText = (EditText) findViewById(R.id.txtProductNameAdd);
priceEditText = (EditText) findViewById(R.id.txtPriceAdd);
distanceEditText = (EditText) findViewById(R.id.txtDistanceAdd);
addButton = (Button) findViewById(R.id.btnAdd);
addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (CheckNetworkStatus.isNetworkAvailable(getApplicationContext())) {
addProduct();
} else {
Toast.makeText(AddProductActivity.this,
"Unable to connect to internet",
Toast.LENGTH_LONG).show();
}
}
});
}
/**
* Checks whether all files are filled. If so then calls AddMovieAsyncTask.
* Otherwise displays Toast message informing one or more fields left empty
*/
private void addProduct() {
if (!STRING_EMPTY.equals(productNameEditText.getText().toString()) &&
!STRING_EMPTY.equals(priceEditText.getText().toString()) &&
!STRING_EMPTY.equals(distanceEditText.getText().toString())) {
productName = productNameEditText.getText().toString();
price = priceEditText.getText().toString();
distance = distanceEditText.getText().toString();
new AddProductAsyncTask().execute();
} else {
Toast.makeText(AddProductActivity.this,
"One or more fields left empty!",
Toast.LENGTH_LONG).show();
}
}
/**
* AsyncTask for adding a movie
*/
private class AddProductAsyncTask extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
//Display proggress bar
pDialog = new ProgressDialog(AddProductActivity.this);
pDialog.setMessage("Adding Movie. Please wait...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected String doInBackground(String... params) {
HttpJasonParser httpJsonParser = new HttpJasonParser();
Map<String, String> httpParams = new HashMap<>();
//Populating request parameters
httpParams.put(KEY_PRODUCT_NAME, productName);
httpParams.put(KEY_PREIS, price);
httpParams.put(KEY_STRECKE, distance);
JSONObject jsonObject = httpJsonParser.makeHttpRequest(
BASE_URL + "add_product.php", "POST", httpParams);
try {
success = jsonObject.getInt(KEY_SUCCESS);
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String result) {
pDialog.dismiss();
runOnUiThread(new Runnable() {
public void run() {
if (success == 1) {
//Display success message
Toast.makeText(AddProductActivity.this,
"Movie Added", Toast.LENGTH_LONG).show();
Intent i = getIntent();
//send result code 20 to notify about movie update
setResult(20, i);
//Finish ths activity and go back to listing activity
finish();
} else {
Toast.makeText(AddProductActivity.this,
"Some error occurred while adding movie",
Toast.LENGTH_LONG).show();
}
}
});
}
}
}
Всякий раз, когда я запускаю свое приложение, выводится сообщение «при добавлении фильма произошла ошибка».Я изменил манифесты и просто не могу найти свою ошибку.
Любая помощь будет очень признательна!Я знаю, что это много читать, но я действительно застрял: /