我卡在這裏。問題是我必須使用齊射保存數據。我如何保存它,程序總是強制關閉。當保存它,「intaniryanti.golearnv1t如何解決使用android studio上傳圖像中的FATAL EXCEPTION java.lang.NullPointerException?
E/AndroidRuntime:致命異常:主
過程:com.intaniryanti.golearnv1t,PID:
顯示java.lang.NullPointerException:嘗試調用虛擬方法「無效 com.intaniryanti.golearnv1t.app.AppController.addToRequestQueue(com.android.volley.Request, java.lang.String)'在空對象上 com.intaniryanti.golearnv1t.ProfileActivity.uploadImage(ProfileActivity.java:at com.intaniryanti.golearnv1t.ProfileActivity.access $ 100(ProfileActivity.java: at com.intaniryanti.golear nv1t.ProfileActivity $ 2.onClick(ProfileActivity.java: at android.view.View.performClick(View.java:
at android.view.View $ PerformClick.run(View.java:
at android.os.Handler .handleCallback(Handler.java:739)
在android.os.Handler.dispatchMessage(Handler.java:95)
「這是我在AndroidManifest.xml中的代碼。我wan't用下面的代碼來顯示:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.intaniryanti.golearnv1t">
<!--
The ACCESS_COARSE/FINE_LOCATION permissions are not required to use
Google Maps Android API v2, but you must specify either coarse or fine
location permissions for the 'MyLocation' functionality.
-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name=".app.AppController"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<!--
The API key for Google Maps-based APIs is defined as a string resource.
(See the file "res/values/google_maps_api.xml").
Note that the API key is linked to the encryption key used to sign the APK.
You need a different API key for each encryption key, including the release key that is used to
sign the APK for publishing.
You can define the keys for the debug and release targets in src/debug/ and src/release/.
-->
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/google_maps_key" />
<activity
android:name=".SplashActivity"
android:label="@string/app_name"
android:noHistory="true"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MapsActivity"
android:label="@string/app_name" />
<activity android:name=".HomeActivity" />
<activity android:name=".LoginActivity" />
<activity android:name=".MainActivity" />
<activity android:name=".Main2Activity" />
<activity android:name=".CatchIMEI" />
<activity android:name=".PermintaanActivity" />
<activity
android:name=".PesananActivity"
android:label="@string/title_activity_pesanan"
android:parentActivityName=".HomeActivity" />
<activity
android:name=".RatingActivity"
android:label="@string/title_activity_rating"
android:parentActivityName=".HomeActivity" />
<activity
android:name=".LayananActivity"
android:label="@string/title_activity_layanan"
android:parentActivityName=".HomeActivity"></activity>
<activity android:name=".ProfileActivity"></activity>
</application>
</manifest>
ProfileActivity.java
package com.intaniryanti.golearnv1t;
import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Base64;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.intaniryanti.golearnv1t.app.AppController;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class ProfileActivity extends AppCompatActivity {
Button buttonChoose;
Button buttonUpload;
ImageView imageView;
EditText txt_name;
Bitmap bitmap;
int success;
int PICK_IMAGE_REQUEST = 1;
private static final String TAG = MainActivity.class.getSimpleName();
// sesuiakan ip address laptop/pc atau ip emulator android bawaan 10.0.2.2
private String UPLOAD_URL ="http://192.168.43.176/GOLearn/upload1.php";
private static final String TAG_SUCCESS = "success";
private static final String TAG_MESSAGE = "message";
private String KEY_IMAGE = "image";
private String KEY_NAME = "name";
String tag_json_obj = "json_obj_req";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
buttonChoose = (Button) findViewById(R.id.buttonChoose);
buttonUpload = (Button) findViewById(R.id.buttonUpload);
txt_name = (EditText) findViewById(R.id.editText);
imageView = (ImageView) findViewById(R.id.imageView);
buttonChoose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showFileChooser();
}
});
buttonUpload.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
uploadImage();
}
});
}
public String getStringImage(Bitmap bmp){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] imageBytes = baos.toByteArray();
String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
return encodedImage;
}
private void uploadImage(){
//menampilkan progress dialog
final ProgressDialog loading = ProgressDialog.show(this, "Uploading...", "Please wait...", false, false);
StringRequest stringRequest = new StringRequest(Request.Method.POST, UPLOAD_URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG, "Response: " + response.toString());
try {
JSONObject jObj = new JSONObject(response);
success = jObj.getInt(TAG_SUCCESS);
if (success == 1) {
Log.d("v Add", jObj.toString());
Toast.makeText(ProfileActivity.this, jObj.getString(TAG_MESSAGE), Toast.LENGTH_LONG).show();
kosong();
} else {
Toast.makeText(ProfileActivity.this, jObj.getString(TAG_MESSAGE), Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
//menghilangkan progress dialog
loading.dismiss();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//menghilangkan progress dialog
loading.dismiss();
//menampilkan toast
Toast.makeText(ProfileActivity.this, error.getMessage().toString(), Toast.LENGTH_LONG).show();
Log.d(TAG, error.getMessage().toString());
}
}){
@Override
protected Map<String, String> getParams() {
//membuat parameters
Map<String,String> params = new HashMap<String, String>();
//menambah parameter yang di kirim ke web servis
params.put(KEY_IMAGE, getStringImage(bitmap));
params.put(KEY_NAME, txt_name.getText().toString().trim());
//kembali ke parameters
Log.d(TAG, ""+params);
return params;
}
};
AppController.getInstance().addToRequestQueue(stringRequest, tag_json_obj);
}
private void showFileChooser() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
Uri filePath = data.getData();
try {
//mengambil fambar dari Gallery
bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
//menampilkan gambar yang dipilih dari gallery ke ImageView
imageView.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void kosong(){
imageView.setImageResource(0);
txt_name.setText(null);
}
}
搖籃
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.2.0'
compile 'com.google.android.gms:play-services:9.4.0'
compile 'com.android.support:design:24.2.0'
compile 'com.mcxiaoke.volley:library:1.0.19'
compile 'com.android.support:cardview-v7:24.2.0'
compile 'com.android.support:support-v4:24.2.0'
compile 'com.google.android.gms:play-services-ads:9.4.0'
compile 'com.google.android.gms:play-services-auth:9.4.0'
compile 'com.google.android.gms:play-services-gcm:9.4.0'
}
軟件包應用程序 - > AppController.java
package com.intaniryanti.golearnv1t.app;
import android.app.Application;
import android.text.TextUtils;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.Volley;
import com.intaniryanti.golearnv1t.volley.LruBitmapCache;
public class AppController extends Application {
public static final String TAG = AppController.class.getSimpleName();
private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;
LruBitmapCache mLruBitmapCache;
private static AppController mInstance;
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
}
public static synchronized AppController getInstance() {
return mInstance;
}
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue(getApplicationContext());
}
return mRequestQueue;
}
public ImageLoader getImageLoader() {
getRequestQueue();
if (mImageLoader == null) {
getLruBitmapCache();
mImageLoader = new ImageLoader(this.mRequestQueue, mLruBitmapCache);
}
return this.mImageLoader;
}
public LruBitmapCache getLruBitmapCache() {
if (mLruBitmapCache == null)
mLruBitmapCache = new LruBitmapCache();
return this.mLruBitmapCache;
}
public <T> void addToRequestQueue(Request<T> req, String tag) {
req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
getRequestQueue().add(req);
}
public <T> void addToRequestQueue(Request<T> req) {
req.setTag(TAG);
getRequestQueue().add(req);
}
public void cancelPendingRequests(Object tag) {
if (mRequestQueue != null) {
mRequestQueue.cancelAll(tag);
}
}
}
Logcat
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.intaniryanti.golearnv1t, PID:
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.intaniryanti.golearnv1t.app.AppController.addToRequestQueue(com.android.volley.Request, java.lang.String)' on a null object at com.intaniryanti.golearnv1t.ProfileActivity.uploadImage(ProfileActivity.java:at com.intaniryanti.golearnv1t.ProfileActivity.access$100(ProfileActivity.java: at com.intaniryanti.golearnv1t.ProfileActivity$2.onClick(ProfileActivity.java: at android.view.View.performClick(View.java:
at android.view.View$PerformClick.run(View.java:
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
請幫助
告訴我們R.layout.activity_profile和太多的logcat –