私は比較的新しいアンドロイドプログラミングです、pdfファイルを表示するためにinbuiltファイルマネージャを呼び出すpdfリーダーを作成したい2番目のクラスで。ここに私のコードはこれまでのところ、まだ問題を抱えて、私は2番目の活動は、選択したPDFファイルを取得することができませんだと思うと私はstartActivityForResultインテントを使用してPDFファイルを選択し、結果を2番目のクラスに返す方法
MainActivity
package com.example.user.projectapp;
import android.app.Activity;
import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.provider.OpenableColumns;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class MainActivity extends AppCompatActivity {
public static String path;
private static final int PICKFILE_REQUEST_CODE = 0;
File tempFile;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getFile();
}
public void getFile() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("application/pdf");
path = intent.getStringExtra("path");
intent.putExtra("path",path);
startActivityForResult(intent, PICKFILE_REQUEST_CODE);
}
Second Activity
package com.example.user.projectapp;
import android.annotation.TargetApi;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.pdf.PdfRenderer;
import android.os.Build;
import android.os.Environment;
import android.os.ParcelFileDescriptor;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import java.io.File;
public class Main2Activity extends AppCompatActivity {
int pagecount = -1;
Button buttonnext, buttonprevious;
ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
buttonnext = (Button) findViewById(R.id.button1);
buttonprevious = (Button) findViewById(R.id.button2);
imageView = (ImageView) findViewById(R.id.imageview);
buttonnext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
pagecount++;
render();
}
});
buttonprevious.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
pagecount--;
render();
}
});
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public void render() {
try {
int width = imageView.getWidth();
int height = imageView.getHeight();
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_4444);
Intent intent = getIntent();
String data = intent.getStringExtra("path");
File file = new File(data);
PdfRenderer renderer = new PdfRenderer(ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY));
if (pagecount < 0) {
pagecount = 0;
} else if (pagecount > renderer.getPageCount()) {
pagecount = renderer.getPageCount() - 1;
}
renderer.openPage(pagecount).render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
imageView.setImageBitmap(bitmap);
imageView.invalidate();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onBackPressed() {
super.onBackPressed();
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
}
}
このエラーを修正することができませんそして、Logcatが変更された
03-28 17:19:33.387 2492-2492/com.example.user.projectapp W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'char[] java.lang.String.toCharArray()' on a null object reference
03-28 17:19:33.400 2492-2492/com.example.user.projectapp W/System.err: at java.io.File.fixSlashes(File.java:185)
03-28 17:19:33.400 2492-2492/com.example.user.projectapp W/System.err: at java.io.File.<init>(File.java:134)
03-28 17:19:33.401 2492-2492/com.example.user.projectapp W/System.err: at com.example.user.projectapp.Main2Activity.render(Main2Activity.java:69)
03-28 17:19:33.401 2492-2492/com.example.user.projectapp W/System.err: at com.example.user.projectapp.Main2Activity$1.onClick(Main2Activity.java:42)
03-28 17:19:33.401 2492-2492/com.example.user.projectapp W/System.err: at android.view.View.performClick(View.java:4764)
03-28 17:19:33.401 2492-2492/com.example.user.projectapp W/System.err: at android.view.View$PerformClick.run(View.java:19844)
03-28 17:19:33.401 2492-2492/com.example.user.projectapp W/System.err: at android.os.Handler.handleCallback(Handler.java:739)
03-28 17:19:33.401 2492-2492/com.example.user.projectapp W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
03-28 17:19:33.401 2492-2492/com.example.user.projectapp W/System.err: at android.os.Looper.loop(Looper.java:135)
03-28 17:19:33.401 2492-2492/com.example.user.projectapp W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5351)
03-28 17:19:33.401 2492-2492/com.example.user.projectapp W/System.err: at java.lang.reflect.Method.invoke(Native Method)
03-28 17:19:33.401 2492-2492/com.example.user.projectapp W/System.err: at java.lang.reflect.Method.invoke(Method.java:372)
03-28 17:19:33.401 2492-2492/com.example.user.projectapp W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
03-28 17:19:33.401 2492-2492/com.example.user.projectapp W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)
コードを与えます...... まだonActivityResultが結果を返さない、私
File myFile;
public static String result;
public String path;
private static final int PICKFILE_REQUEST_CODE = 12;
int pagecount = -1;
Button buttonnext, buttonprevious;
ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getFile();
buttonnext = (Button) findViewById(R.id.button1);
buttonprevious = (Button) findViewById(R.id.button2);
imageView = (ImageView) findViewById(R.id.imageview);
buttonnext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
pagecount++;
render();
}
});
buttonprevious.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
pagecount--;
render();
}
});
}
public void getFile() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("application/pdf");
//intent.setType("image/");
// path = intent.getStringExtra("path");
//intent.putExtra("path",path);
//intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(intent, 12);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode==12){
if (data != null){
Toast.makeText(this,"file selected",Toast.LENGTH_LONG).show();
// result=data.getStringExtra("data");
Uri uri=data.getData();
// String uriString = uri.toString();
myFile = new File(uri.toString());
path = myFile.getAbsolutePath();
// result=data.toString();
// URI uri=data.getParcelableExtra(path);
// path=fileUri.toString();
this.render();
}
}
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public void render() {
try {
int width = imageView.getWidth();
int height = imageView.getHeight();
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_4444);
//Intent intent = getIntent();
//String path = intent.getStringExtra("path");
// Uri uri = Uri.parse(uri_Str);
File file = new File(path);
//File storage = Environment.getExternalStorageDirectory();
// intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
PdfRenderer renderer = new PdfRenderer(ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY));
if (pagecount < 0) {
pagecount = 0;
} else if (pagecount > renderer.getPageCount()) {
pagecount = renderer.getPageCount() - 1;
}
// Matrix m = imageView.getImageMatrix();
// Rect rect=new Rect(0,0,width,height);
renderer.openPage(pagecount).render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
//imageView.setImageMatrix(m);
imageView.setImageBitmap(bitmap);
imageView.invalidate();
} catch (Exception e) {
e.printStackTrace();
}
}
}
そしてlogcatエラー一つだけの活動に基づいたものになるように...
あなたのパスがヌルであるため、03-29 11:32:47.276 21674-21674/com.example.user.newtry W/System.err: java.io.FileNotFoundException: No such file or directory
03-29 11:32:47.283 21674-21674/com.example.user.newtry W/System.err: at android.os.Parcel.openFileDescriptor(Native Method)
03-29 11:32:47.283 21674-21674/com.example.user.newtry W/System.err: at android.os.ParcelFileDescriptor.openInternal(ParcelFileDescriptor.java:253)
03-29 11:32:47.283 21674-21674/com.example.user.newtry W/System.err: at android.os.ParcelFileDescriptor.open(ParcelFileDescriptor.java:199)
だからあなたが問題を抱えています。面白い。 – greenapps
ソリューションをお手伝いできますか? –
何のための解決策?問題の説明はありません。質問はありません。あなたはまだまともな投稿を書く必要があることを理解していないのですか? – greenapps