2017-03-28 2 views
0

私は比較的新しいアンドロイドプログラミングです、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) 
+0

だからあなたが問題を抱えています。面白い。 – greenapps

+0

ソリューションをお手伝いできますか? –

+0

何のための解決策?問題の説明はありません。質問はありません。あなたはまだまともな投稿を書く必要があることを理解していないのですか? – greenapps

答えて

0

はい.. ..これはあなたがnullポインタ例外にコードの下

+0

どうすればいいですか? –

+0

MainActivity.javaの完全なコードを貼り付けてください。その欠けている – Sonam

0

使用を得ている理由は、それはあなたのエラー与えることはありません。

MainActivityを

 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 = new Intent(this, Main2Activity.class); 
     // intent.putExtra("path", path); 
     startActivityForResult(intent, PICKFILE_REQUEST_CODE); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if(requestCode==PICKFILE_REQUEST_CODE && resultCode==RESULT_OK) { 
      Intent intent = new Intent(this, Main2Activity.class); 
      Uri uri = data.getData(); 
      String uriString = uri.toString(); 
      File myFile = new File(uriString); 
      path = myFile.getAbsolutePath(); 
      Log.d("uri",uriString + " " + path); 
      Bundle extras = new Bundle(); 
      extras.putParcelable("path", uri); 
      // intent.putExtra(); 
      startActivityForResult(intent, PICKFILE_REQUEST_CODE); 
     } 
     super.onActivityResult(requestCode, resultCode, data); 
    } 
} 

Main2Activity

import android.annotation.TargetApi; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.graphics.pdf.PdfRenderer; 
import android.net.Uri; 
import android.os.Build; 
import android.os.Environment; 
import android.os.ParcelFileDescriptor; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
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(); 
      Bundle extras = intent.getExtras(); 
      Uri data = extras.getParcelable("path"); 
      Log.d("Soanam","path" + data); 
      File file = new File(data.toString()); 

      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); 

    } 
} 
+0

あなたの要件に応じてそれを修正してください – Sonam

+0

これは正確に上記の貼り付けと同じように実行します。私はまだこれを持っています:03-29 10:18:22.602 10094-10094/com.example.user。 mpdfreader W/System.err:java.lang.NullPointerException:NULLオブジェクト参照で仮想メソッド 'android.os.Parcelable android.os.Bundle.getParcelable(java.lang.String)'を呼び出そうとしました 03-29 10: 18:22.603 10094-10094/com.example.user.mpdfreader W/System.err:com.example.user.mpdfreader.Main2Activity.render(Main2Activity.java:65) –

+0

選択したファイルが受信されていないようですonActivityResult –

関連する問題